<template>
    <view class="uni-table-checkbox" @click="selected">
        <view v-if="!indeterminate" class="checkbox__inner" :class="{'is-checked':isChecked,'is-disable':isDisabled}">
            <view class="checkbox__inner-icon"></view>
        </view>
        <view v-else class="checkbox__inner checkbox--indeterminate">
            <view class="checkbox__inner-icon"></view>
        </view>
    </view>
</template>

<script>
    export default {
        name: 'TableCheckbox',
        emits: ['checkboxSelected'],
        props: {
            indeterminate: {
                type: Boolean,
                default: false
            },
            checked: {
                type: [Boolean, String],
                default: false
            },
            disabled: {
                type: Boolean,
                default: false
            },
            index: {
                type: Number,
                default: -1
            },
            cellData: {
                type: Object,
                default() {
                    return {}
                }
            }
        },
        watch: {
            checked(newVal) {
                if (typeof this.checked === 'boolean') {
                    this.isChecked = newVal
                } else {
                    this.isChecked = true
                }
            },
            indeterminate(newVal) {
                this.isIndeterminate = newVal
            }
        },
        data() {
            return {
                isChecked: false,
                isDisabled: false,
                isIndeterminate: false
            }
        },
        created() {
            if (typeof this.checked === 'boolean') {
                this.isChecked = this.checked
            }
            this.isDisabled = this.disabled
        },
        methods: {
            selected() {
                if (this.isDisabled) return
                this.isIndeterminate = false
                this.isChecked = !this.isChecked
                this.$emit('checkboxSelected', {
                    checked: this.isChecked,
                    data: this.cellData
                })
            }
        }
    }
</script>

<style lang="scss">
    $checked-color: #007aff;
    $border-color: #DCDFE6;
    $disable: 0.4;

    .uni-table-checkbox {
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: center;
        position: relative;
        margin: 5px 0;
        cursor: pointer;

        // 多选样式
        .checkbox__inner {
            /* #ifndef APP-NVUE */
            flex-shrink: 0;
            box-sizing: border-box;
            /* #endif */
            position: relative;
            width: 16px;
            height: 16px;
            border: 1px solid $border-color;
            border-radius: 2px;
            background-color: #fff;
            z-index: 1;

            .checkbox__inner-icon {
                position: absolute;
                /* #ifdef APP-NVUE */
                top: 2px;
                /* #endif */
                /* #ifndef APP-NVUE */
                top: 2px;
                /* #endif */
                left: 5px;
                height: 7px;
                width: 3px;
                border: 1px solid #fff;
                border-left: 0;
                border-top: 0;
                opacity: 0;
                transform-origin: center;
                transform: rotate(45deg);
                box-sizing: content-box;
            }

            &.checkbox--indeterminate {
                border-color: $checked-color;
                background-color: $checked-color;

                .checkbox__inner-icon {
                    position: absolute;
                    opacity: 1;
                    transform: rotate(0deg);
                    height: 2px;
                    top: 0;
                    bottom: 0;
                    margin: auto;
                    left: 0px;
                    right: 0px;
                    bottom: 0;
                    width: auto;
                    border: none;
                    border-radius: 2px;
                    transform: scale(0.5);
                    background-color: #fff;
                }
            }

            &:hover {
                border-color: $checked-color;
            }

            // 禁用
            &.is-disable {
                /* #ifdef H5 */
                cursor: not-allowed;
                /* #endif */
                background-color: #F2F6FC;
                border-color: $border-color;
            }

            // 选中
            &.is-checked {
                border-color: $checked-color;
                background-color: $checked-color;

                .checkbox__inner-icon {
                    opacity: 1;
                    transform: rotate(45deg);
                }

                // 选中禁用
                &.is-disable {
                    opacity: $disable;
                }
            }

        }
    }
</style>
